package com.qsl.ssyx.product.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qsl.ssyx.model.product.SkuInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qsl.ssyx.vo.product.SkuInfoQueryVo;
import com.qsl.ssyx.vo.product.SkuInfoVo;
import com.qsl.ssyx.vo.product.SkuStockLockVo;

import java.util.List;

/**
 * <p>
 * sku信息 服务类
 * </p>
 *
 * @author 青衫泪
 * @since 2023-08-10
 */
public interface SkuInfoService extends IService<SkuInfo> {

    //    条件分页查询
    IPage<SkuInfo> selectPage(Page<SkuInfo> pageParam, SkuInfoQueryVo skuInfoQueryVo);

    //    商品上、下架状态
    boolean updatePublishStatus(Long id, Integer publishStatus);

    // 商品修改审核状态
    boolean updateCheckStatus(Long id, Integer status);

    //    是否新人专享
    boolean isNewPerson(Long id, Integer isNewPerson);

    // 新增- sku_info,sku_attr_value,sku_image,sku_poster
    boolean saveSkuInfo(SkuInfoVo skuInfoVo);

    //    根据Id查询  sku_info,sku_attr_value,sku_image,sku_poster
    SkuInfoVo getBySkuId(Integer id);

    // 修改 sku_info,sku_attr_value,sku_image,sku_poster
    boolean updateBySkuId(SkuInfoVo skuInfovo);

    // 删除 sku_info,sku_attr_value,sku_image,sku_poster
    boolean removeBySkuId(Integer id);

    // 批量删除 sku_info,sku_attr_value,sku_image,sku_poster
    boolean removeBySkuIds(List<Integer> idList);

    // 根据skuId获取商品信息列表
    List<SkuInfo> getSkuInfoListById(Long skuId);

    //    根据商品名称 查询SkuInfo集合
    List<SkuInfo> getSkuInfosBySkuName(String skuName);

    // 获取所有新人专享商品
    List<SkuInfo> findNewPersionSkuInfoList();

    // 根据商品id获取商品信息-4表连接sku_info 和sku_image-sku图片 和attr-商品属性和 sku_poster-海报表
    SkuInfoVo getSKuInfoVoBySkuId(Long skuId);

    //    公平锁锁定商品
    Boolean checkAndLock(List<SkuStockLockVo> skuStockLockVoList, String orderNo);

    //   TODO 支付成功 rabbitMq发送消息②减库存，③ 删除购物车已购买的商品记录   ==>   队列，交换机,路由key,消息  ===》 ssyx.order.direct，ssyx.minus.stock,订单号
    void minusStock(String orderNo);
}
